/**
 * Qilin-App的全局封装方法
 * 主要方便维护项目以及增加开发效率等
 * @author Qilin
 * @CreateDate 2024-07-31
 * @lastUpdateDate 2024-08-22
 */

/**
 * 将正则字符串转为正则对象的方法封装
 * 注：网页或h5可以直接eval函数或new Function使用，但是小程序中都不可用，故此封装此方法
 * 网页或h5使用方法如下示例：
 * @function1 new Function("return " + regStr)();
 * @function2 eval(regStr);
 */
export function regStr2RegExp(regStr){
	let regex = regStr.match(/^\/([\S\s]+)\/([gim]{0,3})$/);
	regex = regex || [,regex,""];
	regex = new RegExp(regex[1],regex[2]);
	return regex;
};

/**
 * 获取当前页面接收的参数对象
 * 注：页面接收的参数也可以使用onLoad页面生命周期函数来获取
 * @returns 参数对象：其中options中就是接收的传参信息
 */
export function getCurrentPageParams(){
	const pages = getCurrentPages();
	const currentPage = pages[pages.length - 1];
	return currentPage;
};

/**
 * 提示相关信息并返回上一层页面（针对不同端）
 * 注意：若是android系统，则会返回到上一层并且刷新页面，且不会触发onBackPress页面生命函数
 * @params String 提示信息
 * @params Number 停在当前页面的毫秒数--仅针对于小程序端
 * @returns 无返回值
 */
export function QilinShowToast(title,time = 1000){
	uni.showToast({
		title,
		icon:"none",
		success:()=>{
			// #ifdef H5
			uni.navigateBack({
				delta:1
			});
			// #endif
			// #ifndef MP
			setTimeout(()=>{
				uni.navigateBack({
					delta:1
				});
			},time);
			// #endif
		}
	});
};

/**
 * 获取H5端地址栏url的对应参数名的参数值
 * @params String keyName 参数名
 * @params String url 指定url，不传默认为当前url
 * @returns 参数值
 */
export function getUrlParamsValue(keyName,url){
	if(!keyName || typeof keyName !== "string"){
		throw new TypeError("第一个参数必传且须为字符串");
	};
	let searchUrl=window.location.search.slice(1);
	if(url){
		searchUrl=url.slice(url.indexOf("?")+1);
	};
	let reg=new RegExp("(^|&)"+keyName+"=([^&]*)(&|$)");
	if(!searchUrl){
		let arr=window.location.hash.split("?");
		if(url){
			arr=url.split("?");
		};
		if(arr.length === 2){
			searchUrl=arr[1];
		};
	};
	let result=searchUrl.match(reg);
	if(result){
		return decodeURIComponent(result[2]);
	}else{
		return null;
	};
};